package com.bestdreamer.algorithm;

/**
 * 单链表逆序
 */
public class IntNode {

    // 节点的整型数据
    private final int data;
    // 对于链表中的最后一个节点，其 link 部分为null，否则 link 为引向链表中下一个节点的应用。
    private IntNode link;

    // 根据制定的数据和引向下一节点的引用创建生成一个节点
    public IntNode (int initialData,IntNode initialLink){
        this.data = initialData;
        this.link = initialLink;
    }

    public static IntNode reversel(IntNode head){
        if(head == null || head.link == null){
            return head;
        }
        IntNode newHead = reversel(head.link);
        head.link.link = head;
        head.link = null;
        return newHead;
    }

    // 链表的反转，利用循环方法
    public static IntNode reverse2(IntNode head){
        if(head == null || head.link == null){
            return head;
        }
        IntNode newHead = null;
        IntNode nextNode = null;
        while (head != null){
            newHead = head.link;
            head.link = newHead;
            newHead = head;
            head = nextNode;
        }
        return newHead;
    }
}
